type IsUnion<T, U = T> = T extends T ? [U] extends [T] ? false : true : false

// []数组包着是为了防止U被拆分